/**
 * PhoneCleaner - 电话号码清洗工具
 * 格式化手机号、座机号，并提取归属地（基础版）
 */

class PhoneCleaner {
    /**
     * 清洗电话号码（去除分隔符等）
     * @param {string} value - 输入值
     * @returns {string|null} 清洗后的号码
     */
    static clean(value) {
        if (!value) return null;

        // 转字符串并清理空格
        let str = String(value).trim();

        // 移除常见分隔符 (- space ( ) +)
        str = str.replace(/[\-\s\(\)\+]/g, '');

        // 移除开头的86 (中国区号)
        if (str.startsWith('86')) {
            str = str.substring(2);
        }

        // 验证基本格式 (手机号11位，座机号带区号通常11-12位)
        if (/^\d{7,12}$/.test(str)) {
            return str;
        }

        return null;
    }

    /**
     * 解析号码信息
     * @param {string} value - 号码
     * @returns {Object} 解析结果
     */
    static parse(value) {
        const cleaned = this.clean(value);

        if (!cleaned) {
            return {
                valid: false,
                original: value,
                number: null,
                type: 'unknown', // mobile, landline, unknown
                province: null,
                city: null,
                carrier: null // 运营商
            };
        }

        let type = 'unknown';
        let province = null;
        let carrier = null;

        // 简单的手机号判断 (1开头，11位)
        if (/^1[3-9]\d{9}$/.test(cleaned)) {
            type = 'mobile';
            // 简单的运营商判断 (仅示例，实际需要完整号段库)
            const prefix = cleaned.substring(0, 3);
            if (/^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478]|9[8])/.test(cleaned)) {
                carrier = '中国移动';
            } else if (/^1(3[0-2]|4[5]|5[56]|6[6]|7[156]|8[56])/.test(cleaned)) {
                carrier = '中国联通';
            } else if (/^1(33|49|53|7[37]|8[019]|9[19])/.test(cleaned)) {
                carrier = '中国电信';
            }
        }
        // 简单的座机判断 (0开头)
        else if (cleaned.startsWith('0')) {
            type = 'landline';
        }

        // 虽然没有完整离线库，但可以做一些基础的 Mock 归属地或者是保留接口
        // TODO: 接入完整的归属地离线库

        return {
            valid: true,
            original: value,
            number: cleaned,
            type,
            province,
            city: null,
            carrier
        };
    }

    /**
     * 格式化号码
     * @param {string} value 
     * @returns {string} e.g. 138 0013 8000
     */
    static format(value) {
        const cleaned = this.clean(value);
        if (!cleaned) return value; // 原样返回

        // 手机号 3-4-4 格式
        if (cleaned.length === 11 && cleaned.startsWith('1')) {
            return cleaned.replace(/(\d{3})(\d{4})(\d{4})/, '$1 $2 $3');
        }

        // 座机号 (区号3-4位)
        if (cleaned.startsWith('0')) {
            // 简单处理：010/02x 是3位区号，其他4位
            if (/^0(10|2\d)/.test(cleaned)) {
                return cleaned.replace(/(\d{3})(\d+)/, '$1-$2');
            } else {
                return cleaned.replace(/(\d{4})(\d+)/, '$1-$2');
            }
        }

        return cleaned;
    }

    /**
     * 验证是否有效
     */
    static isValid(value) {
        return this.clean(value) !== null;
    }
}

module.exports = PhoneCleaner;
